\section{Creation du meta-modele : M2}

      \subsection{Représentation des concepts de la programmation par composants}	
      Les éléments de la programmation par composants, et donc a représenter
      au sein du méta-modèle, sont les suivants :\\
      \begin{itemize}
		\item{Configuration}
		\item{Composant}	
		\item{Propriété : fonctionnelle ou non fonctionnelle}
		\item{Port : synchrone, asynchrone ou en diffusion continue}
		\item{Service : requis ou fournis}
		\item{Connecteur}
		\item{Rôle : requis ou fournis}
		\item{Glue : traitement du connecteur liant rôle requis et fournis}
		\item{Interface : composée de rôles, ou de ports et services}	
		\item{Attachment}
		\item{Binding}
	\end{itemize}
      
      \subsection{Le diagramme de classes}
		\begin{center}
		\includegraphics[width=0.65\linewidth]{M2.png}
		\end{center}
\newpage		
      \subsection{Description explicative}		
		\paragraph{\textbf{Interaction entre les classes}\\}
		Un composant possède au minimum deux interfaces, chacune composée
		de ports et de services. Il possède aussi des propriétés, fonctionnelles, et/ou non-fonctionnelles.\\
		Chaque port peut être utilisé par un service, requis ou fournis (D'où le fait qu'un composant a au moins 
		deux interfaces.).Il existe trois types de ports : synchrone, asynchrone, et en flux continue.\\
		Les services requis sont ceux provenant d'autres composants et utilisés
		par celui auquel ils sont liés via l'interface; tandis que les services fournis
		sont, à contrario, ceux mis à disposition d'autres composants. Les composants peuvent être eux-mêmes composés.\\
		Les config sont composés de composants et de connecteurs. Elles sont, tout comme les connecteurs, elles-mêmes des composants.\\
		Les connecteurs lient les composants entre eux, via deux interfaces minimum, chacune composée de rôles fournis et requis. Le code faisant office 			de lien entre les rôles requis et fournis est appelé "Glue" et est dans une classe à part, pour permettre une plus grande évolutivité.\\
		Les rôles requis sont ceux provenant de services fournis par des composants, et les rôles fournis sont ceux mis à disposition des services 				 			requis d'autres composant.\\
		Les liens entre composants, via des connecteurs, sont nommés des attachements, tandis que ceux étant directement entre les ports 
		des composants et des config, sont des bindings.\\
		Les compositions citées précédemment entre Config, Composant et Connector ont été généralisées via un héritage des trois classes sur la classe Element. 		Celle-ci est donc composée d'elle-même, mettant ainsi en valeur l'utilisation du pattern Composite. Element est composé aussi d'interfaces, ce qui est 			donc aussi le cas pour ces trois classes filles.	
      
